#ifndef MODEL_H
#define MODEL_H

#define INPUT_SIZE 7
#define HIDDEN_SIZE1 64
#define HIDDEN_SIZE2 64
#define NUM_CLASSES_TEMP 13
#define NUM_CLASSES_HUMIDITY 21

// 外部变量声明
extern int temp_recommend;
extern int humidity_recommend;

// 矩阵乘法函数
void matrix_multiply(float* result, const float* mat1, const float* mat2, int rows1, int cols1, int cols2);

// ReLU 激活函数
void relu(float* array, int size);

// 前向推理函数
void forward(float* input,
             float fc1_weights[HIDDEN_SIZE1][INPUT_SIZE], float fc1_bias[HIDDEN_SIZE1],
             float fc2_weights[HIDDEN_SIZE2][HIDDEN_SIZE1], float fc2_bias[HIDDEN_SIZE2],
             float fc3_temp_weights[NUM_CLASSES_TEMP][HIDDEN_SIZE2], float fc3_temp_bias[NUM_CLASSES_TEMP],
             float fc3_humidity_weights[NUM_CLASSES_HUMIDITY][HIDDEN_SIZE2], float fc3_humidity_bias[NUM_CLASSES_HUMIDITY],
             float* temp_logits, float* humidity_logits);

// 计算最大值索引函数
int argmax(const float* array, int size);

// 执行推理函数
void inference(float* input);

#endif // MODEL_H
